作者:陈广 日期:2018-6-9
我们在使用 PostgreSQL 时,一般会把数据库安装在远程服务器上。一般情况下,我们会使用 pgadmin 客户端程序来远程维护数据库。但如果所使用电脑没有客户端工具,也不方便安装,就需要使用 Linux 终端的命令行方式来控制数据库了。PostgreSQL 自带的 psql 命令可以解决这个问题,本文将介绍并演示 psql 的一些基本命令的使用。
要使用 psql,需要按照上一篇文章所介绍的那样登录数据库:
su - postgres
psql -U postgres
如果出现postgres=#
提示符状态,则表示登录成功了。
接下来我们创建一个表示学生信息的数据库,取名为:StuInfo
。
输入命令:
CREATE DATABASE StuInfo;
这里需要注意,CREATE DATABASE
必须大写,语句的最后必须加上;
号。这其实就是标准的 SQL 语句,还是很好用的。
接下来输入\l
命令来查看所有数据库,注意是字母l
,不是数字1
。最终效果如下图所示:
可以看到数据库列表中一共有四个数据库,其中的stuinfo
就是我们新建的那个数据库。
下面我们针对StuInfo
数据库进行操作,进入此数据库可使用命令:
\c stuinfo
当出现stuinfo=#
时,说明我们正针对StuInfo
进行操作。如下图:
之前在一个程序比赛中做过裁判,参赛选手是已经工作的人。很多选手设计的表结构让我大吃一惊,完全没有章法,乱七八槽,大量冗余。对于关系型数据库来说,设计符合范式的表应该是程序员最基本的基本功。我本身对数据库研究不深,这里就不详述了。我们只演示最基本的东西。你要问如何设计规范的表?我给的建议就是微软的 SQL Server 和 Access 都自带示例数据库,去研究一下基本就懂了。使用学生信息做为示例,是因为对学生来说,这是最容易理解的。
首先使用以下命令创建系部表depment
:
CREATE TABLE depment(
depId INT PRIMARY KEY,
depName CHAR(30)
);
注意命令大写,命令中可使用回车,psql 会通过;
来判定命令的结束。
使用命令\d
查看所有数据表,使用\d + 表名
查看指定表结构,此例中为\d depment
。效果如下图所示:
使用如下命令创建班级表class
:
CREATE TABLE class(
classId INT PRIMARY KEY,
className VARCHAR(50) NOT NULL,
depId INT REFERENCES depment(depId)
);
效果如下图所示:
使用如下命令创建学生表'student`:
CREATE TABLE student(
stuId INT PRIMARY KEY,
stuName CHAR(8) NOT NULL,
sex CHAR(2),
birthday DATE,
classId INT REFERENCES class(classId)
);
效果如下图所示:
接下来向各表插入一些数据。
使用如下命令向系部表插入4条数据:
INSERT INTO depment VALUES(1,'机械系');
INSERT INTO depment VALUES(2,'电气系');
INSERT INTO depment VALUES(3,'计算机系');
INSERT INTO depment VALUES(4,'工商系');
接下来使用如下命令查看插入的数据:
select * from depment;
操作完成后,效果如下图所示:
使用如下命令向班级表插入5条数据:
INSERT INTO class VALUES(1,'自动化1701',2);
INSERT INTO class VALUES(2,'数据控1701',1);
INSERT INTO class VALUES(3,'物联网1701',3);
INSERT INTO class VALUES(4,'物联网1702',3);
INSERT INTO class VALUES(5,'软件1701',3);
效果如下图所示:
使用如下命令向学生表插入8条数据:
INSERT INTO student VALUES(1,'张三','男','1995-6-1',3);
INSERT INTO student VALUES(2,'李四','男','1995-7-1',3);
INSERT INTO student VALUES(3,'王五','女','1995-8-1',3);
INSERT INTO student VALUES(4,'马六','男','1995-8-2',3);
INSERT INTO student VALUES(4,'钱七','女','1996-8-3',3);
INSERT INTO student VALUES(6,'刘八','男','1996-8-4',3);
INSERT INTO student VALUES(7,'何九','女','1996-8-5',3);
INSERT INTO student VALUES(8,'吕十','女','1996-8-5',3);
学生表的stuId
字段应为字符串,且用完整学号,这里偷懒,见谅了。
现在数据库里已经有了数据,接下来写几条简单的查询语句练练手。
select className as 班级名称,depName as 所属系部
from class,depment where class.depId=depment.depId;
效果如下图所示:
select stuid,stuname,sex,birthday,className,depName
from student,class,depment
where student.classId=class.classId
and class.depId=depment.depId;
运行结果如下图所示:
select stuid,stuname,sex,className
from student,class
where student.classId=class.classId
and className='物联网1701'
and sex='女';
运行结果如下图所示:
好吧,命令行方式就讲到这了,说实在的,很不方便,仅应急使用,专业 DBA 另说。删除、更新什么的我也不演示了,反正是标准 SQL 语句,还是很方便的。
;